//可选链 ES11(2020年) 中新增的特性  不是TS中独有的
// 当我们去读取一个对象的属性,但是这个属性又不存在的时候(那么就会返回undefined),那么继续通过.的形式去访问下一级(undefined.xxx),则会出现报错
// ?.

type Person = {
    readonly name: string,
    friend?: {
        name: string,
        age?: number,
        girlFriend?: {
            name: string
        }
    }
}

let obj: Person = {
    name: "哈哈",
    friend: {
        name: "xixi"
    }
}
// obj.name = "abc"
//如果obj中的friend属性存在则继续读取其中的name 如果不存在则返回undefined
console.log(obj?.name);
console.log(obj.friend?.name);
console.log(obj.friend?.girlFriend?.name);

// if(obj.friend){
// //obj.friend ==> undefined
//     console.log(obj.friend.name);
//     if(obj.friend.girlFriend){
//         console.log(obj.friend.girlFriend.name);
//     }
// }


//!!
let flag: boolean = !!("你好世界");

//??空值合并操作符  ES11
let msg = null;
let trueMsg = msg ?? "hello World";//==>msg ? msg : "hello World"
console.log(trueMsg)
